﻿// -----------------------------------------------------------------------
// <copyright file="DevocaoFormModel.cs" company="Storytelling">
// TODO: Update copyright text.
// </copyright>
// -----------------------------------------------------------------------
namespace Storytelling.Modelos.VTR
{
    using System.ComponentModel.DataAnnotations;
    using Storytelling.Entidades.VTR;
    using Storytelling.Utils;
    using System.Linq;

    public class DevocaoFormModel : InativoFormModel<Devocao>
    {
        private string[] devocaoDisciplinaDisciplina;

        public override long? Id
        {
            get { return base.Id; }
            set { base.Id = value; }
        }

        [Required]
        [Range(1, 99, ErrorMessage = "O Custo deve ser de 1 a 99")]
        [Display(Name = "Custo")]
        public virtual int Custo
        {
            get { return Entidade.Custo; }
            set { Entidade.Custo = value; }
        }

        [Required]
        [Display(Name = "Descrição")]
        [StringLength(1000, MinimumLength = 5)]
        public virtual string Descricao
        {
            get { return Entidade.Descricao; }
            set { Entidade.Descricao = value; }
        }

        public virtual long[] DevocaoDisciplinaId
        {
            get
            {
                return Entidade.PreRequisitos != null ? Entidade.PreRequisitos.Select(ent => ent.Id).ToArray() : new long[0];
            }
            set
            {
                Entidade.Transferidor<Devocao, DevocaoDisciplina, long>(value, ent => ent.PreRequisitos, (valor, item) =>
                {
                    item.DevocaoId = Entidade.Id;
                    item.Id = valor;
                });
            }
        }

        public virtual string[] DevocaoDisciplinaDisciplina
        {
            get
            {
                Entidade.CarregarArray<Devocao, DevocaoDisciplina>(ref devocaoDisciplinaDisciplina, ent => ent.PreRequisitos, item => item.Disciplina);
                return devocaoDisciplinaDisciplina;
            }
            set { devocaoDisciplinaDisciplina = value; }
        }

        [ArrayRange(2, default(long))]
        [Display(Name = "Pré-requisito")]
        public virtual long[] DevocaoDisciplinaDisciplinaValor
        {
            get
            {
                return Entidade.PreRequisitos != null ? Entidade.PreRequisitos.Select(ent => ent.DisciplinaId).ToArray() : new long[0];
            }
            set
            {
                Entidade.Transferidor<Devocao, DevocaoDisciplina, long>(value, ent => ent.PreRequisitos, (valor, item) =>
                {
                    item.DevocaoId = Entidade.Id;
                    item.DisciplinaId = valor;
                });
            }
        }

        [ArrayRange(2, default(int))]
        [Display(Name = "Nível")]
        public virtual int[] DevocaoDisciplinaNiveis
        {
            get
            {
                return Entidade.PreRequisitos != null ? Entidade.PreRequisitos.Select(ent => ent.Nivel).ToArray() : new int[0];
            }
            set
            {
                Entidade.Transferidor<Devocao, DevocaoDisciplina, int>(value, ent => ent.PreRequisitos, (valor, item) =>
                {
                    item.DevocaoId = Entidade.Id;
                    item.Nivel = valor;
                });
            }
        }
    }
}
